package com.falidos.modelo.dao;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.LinkedList;

import com.falidos.modelo.artefatos.Artefato;
import com.falidos.modelo.artefatos.Livro;
import com.falidos.utilidades.conexao.Conexao;

public class LivroDAO extends DAO{

	public boolean cadastrar(Artefato artefato) {
		Livro livro = (Livro) artefato;
		Connection con = Conexao.obterInstancia().getConexao();
		String sql = "INSERT INTO livros(autor, titulo, isbn, preco, categoria, palavrachave)" +
					 "VALUES('" + livro.getAutores() + "'," +
							"'" + livro.getTitulo() + "'," +
							"'" + livro.getIsbn() + "'," +
							"'" + livro.getPreco() + "'," +
							"'" + livro.getCategoria() + "'," +
							"'" + livro.getPalavraChave() + "')";
		try {
			Statement st = con.createStatement();
			int mod = st.executeUpdate(sql);
			if(mod != 0)
				return true;
			else
				return false;
		} catch (SQLException e) {			
			e.printStackTrace();
		}
		return false;
	}

	@Override
	public boolean alterar(Artefato artefato) {
		Livro livro = (Livro) artefato;
		Connection con = Conexao.obterInstancia().getConexao();
		String sql = "UPDATE livros SET" +
				     " autor = '" + livro.getAutores() +
				     "', titulo = '" + livro.getTitulo() +
				     "', isbn = '" + livro.getIsbn() + 
				     "', preco = '" + livro.getPreco() +
				     "', categoria = '" + livro.getCategoria() +
				     "', palavrachave = '" + livro.getPalavraChave() +
				     "' WHERE id = " + livro.getId();
		try {
			Statement st = con.createStatement();
			int mod = st.executeUpdate(sql);
			if(mod != 0)
				return true;
			else
				return false;
		} catch (SQLException e) {			
			e.printStackTrace();
		}
		return false;		
	}

	@Override
	public boolean excluir(Artefato artefato) {
		Livro livro = (Livro) artefato;
		Connection con = Conexao.obterInstancia().getConexao();
		String sql = "DELETE FROM livros WHERE id = " + livro.getId();
		try {
			Statement st = con.createStatement();
			int mod = st.executeUpdate(sql);
			if(mod != 0)
				return true;
			else
				return false;
		} catch (SQLException e) {			
			e.printStackTrace();
		}
		return false;
	}

	@SuppressWarnings("rawtypes")
	public LinkedList pesquisar(String[] campos, String[] operador, String[] chaves, String[] operLogico) {
		Connection con = Conexao.obterInstancia().getConexao();
		LinkedList<Livro> lista = null;
		String sql = "SELECT * FROM livros WHERE ";
		String operando;		
		
		for(int i = 0; i < campos.length; i++){
			if( i != 0){
				sql += " " + (i>=operLogico.length?operLogico[0]:operLogico[i-1]) + " ";
			}
			if((i>=operador.length?operador[0]:operador[i]).equalsIgnoreCase("like")){
				operando = "%";
			}else{
				operando = "";
			}
			sql += campos[i];
			sql += " ";
			sql += i>=operador.length?operador[0]:operador[i];
			sql += " '";
			sql += operando;
			sql += i>=chaves.length?chaves[0]:chaves[i];			
			sql += operando;		
			sql += "'";
		}
		try {
			Statement st = con.createStatement();
			ResultSet rs = st.executeQuery(sql);
			lista = new LinkedList<Livro>();
			while(rs.next()){
				Livro livro = new Livro();
				livro.setCategoria(rs.getString("categoria"));
				livro.setTitulo(rs.getString("titulo"));
				livro.setId(rs.getInt("id"));
				livro.setAutores(rs.getString("autor"));
				livro.setIsbn(rs.getString("isbn"));
				livro.setPalavraChave(rs.getString("palavraChave"));
				livro.setPreco(rs.getDouble("preco"));
				lista.add(livro);
			}
			return lista;
		} catch (SQLException e) {			
			e.printStackTrace();
		}
		return lista;
	}

}
